﻿#region

using APP_PGM.DB.DataSet_PGMTableAdapters;
using MySql.Data.MySqlClient;

#endregion

namespace APP_PGM.DB
{
    public class PGM
    {
        #region Singleton

        private static PGM INSTANCJA;

        private PGM()
        {
        }

        public static PGM Instancja()
        {
            return INSTANCJA ?? (INSTANCJA = new PGM());
        }

        #endregion

        public oddzialyTableAdapter adapterOddzialow;
        public ofertyTableAdapter adapterOfert;
        public pytania_uzytkownikaTableAdapter adapterPytaniaUzytkownika;
        public statusy_ofertTableAdapter adapterStatusyOfert;
        public typy_obiektowTableAdapter adapterTypyObiektow;
        public typy_ofertTableAdapter adapterTypyOfert;
        public uprawnieniaTableAdapter adapterUprawnienia;
        public uzytkownicyTableAdapter adapterUzytkownicy;
        public view_ofertyTableAdapter adapterViewOferty;

        private string ciagPolaczeniowy = string.Empty;
        public DataSet_PGM dane;

        public string ParametryPolaczenia
        {
            get { return ciagPolaczeniowy; }
            set
            {
                ciagPolaczeniowy = value;
                inicjalizuj(value);
            }
        }

        #region Aktualizacja danych

        public void Aktualizuj()
        {
            adapterOddzialow.Fill(dane.oddzialy);
            adapterOfert.Fill(dane.oferty);
            adapterStatusyOfert.Fill(dane.statusy_ofert);
            adapterTypyOfert.Fill(dane.typy_ofert);
            adapterUprawnienia.Fill(dane.uprawnienia);
            adapterUzytkownicy.Fill(dane.uzytkownicy);
            adapterPytaniaUzytkownika.Fill(dane.pytania_uzytkownika);
            adapterTypyObiektow.Fill(dane.typy_obiektow);
            adapterViewOferty.Fill(dane.view_oferty);
        }

        public void AktualizujOddzialy()
        {
            adapterOddzialow.ClearBeforeFill = true;
            adapterOddzialow.Fill(dane.oddzialy);
        }
        public void AktualizujOferty()
        {
            adapterOfert.Fill(dane.oferty);
        }
        public void AktualizujStatusyOfert()
        {
            adapterStatusyOfert.Fill(dane.statusy_ofert);
        }
        public void AktualizujTypyOfert()
        {
            adapterTypyOfert.Fill(dane.typy_ofert);
        }
        public void AktualizujUprawnienia()
        {
            adapterUprawnienia.Fill(dane.uprawnienia);
        }
        public void AktualizujUzytkownikow()
        {
            adapterUzytkownicy.Fill(dane.uzytkownicy);
        }
        public void AktualizujPytaniaUzytkownika()
        {
            adapterPytaniaUzytkownika.Fill(dane.pytania_uzytkownika);
        }
        public void AktualizujTypyObiektow()
        {
            adapterTypyObiektow.Fill(dane.typy_obiektow);
        }
        public void AktualizujWidokOfert()
        {
            adapterViewOferty.Fill(dane.view_oferty);
        }

        #endregion

        #region Zapisywanie zmian

        public void ZapiszUzytkownikow()
        {
            adapterUzytkownicy.Update(dane.uzytkownicy);
            dane.uzytkownicy.AcceptChanges();
        }

        public void ZapiszOferty()
        {
            adapterOfert.Update(dane.oferty);
            dane.oferty.AcceptChanges();
        }

        public void ZapiszOddzialy()
        {
            adapterOddzialow.Update(dane.oddzialy);
            dane.oddzialy.AcceptChanges();
        }

        public void ZapiszTypyObiektow()
        {
            adapterTypyObiektow.Update(dane.typy_obiektow);
            dane.typy_obiektow.AcceptChanges();
        }

        public void ZapiszTypyOfert()
        {
            adapterTypyOfert.Update(dane.typy_ofert);
            dane.typy_ofert.AcceptChanges();
        }

        public void ZapiszStatusyOfert()
        {
            adapterStatusyOfert.Update(dane.statusy_ofert);
            dane.statusy_ofert.AcceptChanges();
        }

        public void ZapiszUprawnienia()
        {
            adapterUprawnienia.Update(dane.uprawnienia);
            dane.uprawnienia.AcceptChanges();
        }

        public void ZapiszPytaniaUzytkownika()
        {
            adapterPytaniaUzytkownika.Update(dane.pytania_uzytkownika);
            dane.pytania_uzytkownika.AcceptChanges();
        }

        #endregion

        private void inicjalizuj(string parametrySerwera)
        {
            dane = new DataSet_PGM();

            adapterOddzialow = new oddzialyTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterOddzialow.ClearBeforeFill = true;

            adapterOfert = new ofertyTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterOfert.ClearBeforeFill = true;
            adapterStatusyOfert = new statusy_ofertTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterStatusyOfert.ClearBeforeFill = true;
            adapterTypyOfert = new typy_ofertTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterTypyOfert.ClearBeforeFill = true;
            adapterUprawnienia = new uprawnieniaTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterUprawnienia.ClearBeforeFill = true;
            adapterUzytkownicy = new uzytkownicyTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterUzytkownicy.ClearBeforeFill = true;
            adapterPytaniaUzytkownika = new pytania_uzytkownikaTableAdapter
                                            {Connection = new MySqlConnection(parametrySerwera)};
            adapterPytaniaUzytkownika.ClearBeforeFill = true;
            adapterTypyObiektow = new typy_obiektowTableAdapter {Connection = new MySqlConnection(parametrySerwera)};
            adapterTypyObiektow.ClearBeforeFill = true;
            adapterViewOferty = new view_ofertyTableAdapter { Connection = new MySqlConnection(parametrySerwera) };
            adapterViewOferty.ClearBeforeFill = true;
        }
    }
}